<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>闭包</title>
</head>
<body>
<script>
    //http://www.ruanyifeng.com/blog/2009/08/learning_javascript_closures.html
    //1:变量的作用域
    // 全局变量和局部变量,函数内部可以直接读取全局变量
    // 函数外部无法读取局部变量
    //为什么
    //在函数的外部无法读取函数内部的局部变量
    //  是什么
    //本质:定义在函数内部的一个函数
    //特点:能够读取其他函数内部的变量
    //作用:连接函数内部和函数外部的桥梁
        function f1() {
            var n = 999;
            function f2() {
                console.log(n)
            }
            return f2
        }
        var result = f1()
        result()
    //3:闭包的用途(解决的问题)怎么做
    // 读取(函数内部的)变量的值
    // 保存变量(让函数的值始终保存在内存中)
    // 封装对象的私有属性和私有方法
    var nAdd = null
    function f3() {
        var n =999
        //nAdd是全局函数
        nAdd = function () {
            n ++
        }
        function f4() {
            console.log(n)
        }
        // 需要将函数返回
        return f4
    }
    var result3 = f3()
    result3()
    nAdd()
    result3()
</script>
</body>
</html>